Page({
  data: {
    cart: [],
    cartCount: 0,
    totalPrice: 0,
    isPopupVisible: false,  // 控制弹窗显示与隐藏
    selectedCoupon: null, // 用户选择的优惠券
    availableCoupons: [], // 用户可以使用的优惠券列表
    isCouponPopupVisible: false, // 控制优惠券弹窗显示与隐藏
    totalAmount: 0, // 总金额，用于查询可用优惠券
    couponHint: '请选择',
  },

  onLoad(options) {
    this.getProductList(options.innercode);
    this.getTotalAmount(); // 获取总金额
  },

  // 点击购物车图标时弹出购物车内容
  showCartPopup() {
    if (this.data.cartCount > 0) {
      let totalPrice = 0;
      this.data.cart.forEach(item => {
        totalPrice += (item.price * item.quantity) / 100; // 计算总价
      });
      this.setData({
        isPopupVisible: true,
        totalPrice: totalPrice,
      });
    } else {
      wx.showToast({
        title: '购物车为空',
        icon: 'none',
      });
    }
  },

  doNothing: function () {
    // 留空或返回 false 来阻止默认行为和事件冒泡
    return false;
  },

  // 关闭弹窗的方法
  closePopup: function () {
    this.setData({
      isPopupVisible: false,
    });
  },

  // 关闭弹窗
  closePopup() {
    this.setData({
      isPopupVisible: false,
    });
  },

  // 获取商品列表
  getProductList(innerCode) {
    wx.request({
      url: 'http://localhost:9004/product-service/sku/skuList', // 请求地址
      method: 'GET',
      data: {
        currentPage: 1,
        pageSize: 10,
        innerCode: innerCode || '' // 如果没有提供 innerCode，则使用空字符串或默认值
      },
      success: res => {
        console.log('请求结果:', res);
        if (res.statusCode === 200) {
          this.setData({
            products: res.data.data.records // 将商品列表数据保存到data中
          });
        } else {
          wx.showToast({
            title: '加载失败，请重试',
            icon: 'none'
          });
        }
      },
      fail: () => {
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
      }
    });
  },

  // 添加商品到购物车
  addToCart(e) {
    const product = e.currentTarget.dataset.product;
    let cart = this.data.cart;
    const index = cart.findIndex(item => item.skuId === product.skuId);

    if (index === -1) {
      cart.push({ ...product, quantity: 1 });
    } else {
      cart[index].quantity += 1;
    }

    const totalPrice = this.calculateTotalPrice(cart);  // 重新计算总价

    this.setData({
      cart,
      cartCount: cart.reduce((total, item) => total + item.quantity, 0),
      totalPrice,  // 更新总价
    });

    this.getTotalAmount();
    this.closeCouponPopup();
  },

  // 从购物车减少商品数量
  subtractFromCart(e) {
    const product = e.currentTarget.dataset.product;
    let cart = this.data.cart;
    const index = cart.findIndex(item => item.skuId === product.skuId);

    if (index !== -1) {
      // 如果数量大于1，则减少1
      if (cart[index].quantity > 1) {
        cart[index].quantity -= 1;
      } else {
        // 如果数量为1，则删除商品
        cart.splice(index, 1);
      }
    }

    const totalPrice = this.calculateTotalPrice(cart);  // 重新计算总价

    this.setData({
      cart,
      cartCount: cart.reduce((total, item) => total + item.quantity, 0),
      totalPrice,  // 更新总价
    });

    this.getTotalAmount();
    this.closeCouponPopup();
  },

  // 计算购物车总价
  calculateTotalPrice(cart) {
    let totalPrice = 0;
    cart.forEach(item => {
      totalPrice += (item.price * item.quantity) / 100; // 计算总价
    });
    return totalPrice;
  },

  // 跳转到支付页面
  goToPayPage() {
    if (this.data.cartCount > 0) {
      // 构建skuInfoList数组
      const skuInfoList = this.data.cart.map(item => ({
        skuId: item.skuId,
        quantity: item.quantity
      }));

      const productOrderNo = Date.now(); // 使用当前时间戳作为订单号，实际应用中应从后端获取
      // 构建OrderVO对象
      const orderVO = {
        innerCode: '01000001',
        openId: 'test001',
        skuInfoVOList: skuInfoList,
        productOrderNo: productOrderNo,
        addr: '肯德基市麦当劳县华莱士村',
        openId:'1'
      };

      if (this.data.selectedCoupon) {
        orderVO.couponType = this.data.selectedCoupon.type;
        orderVO.discountRate = this.data.selectedCoupon.discountRate;
        orderVO.discountAmount = this.data.selectedCoupon.discountAmount;
      }


      // 创建订单
      wx.request({
        url: 'http://localhost:9008/order-service/manage/order/create',
        method: 'POST',
        header: {
          'content-type': 'application/json' // 设置请求的 content-type 为 json
        },
        data: orderVO, // 直接传递OrderVO对象
        success: (res) => {
          if (res.statusCode === 200) {
            console.log('订单创建成功', res);
            // 如果选择了优惠券，则尝试使用优惠券
            if (this.data.selectedCoupon) {
              const couponUseReqDTO = {
                id: this.data.selectedCoupon.id, // 假设 selectedCoupon 包含了优惠券的 id
                ordersId: productOrderNo, // 使用刚刚创建的订单号作为订单id
                totalAmount: this.data.totalAmount // 将总价转换为 BigDecimal
              };

              wx.request({
                url: 'http://localhost:9020/couponIntegral-service/inner/coupon/use',
                method: 'POST',
                header: {
                  'content-type': 'application/json' // 设置请求的 content-type 为 json
                },
                data: couponUseReqDTO, // 发送优惠券使用信息
                success: (couponRes) => {
                  if (couponRes.statusCode === 200) {
                    console.log('优惠券使用成功', couponRes);
                  } else {
                    console.error('优惠券使用失败', couponRes);
                    // 可能需要回滚订单或者通知用户优惠券使用失败
                  }
                },
                fail: (err) => {
                  console.error('优惠券使用请求失败', err);
                  // 请求失败的处理
                }
              });
            } else {
            }
          } else {
            // 处理错误情况
            console.error('订单创建请求失败', res);
          }
        },
        fail: (err) => {
          // 请求失败的处理
          console.error('订单创建请求失败', err);
        }
      });

      // 跳转到支付页面，并附带购物车数据
      const cartData = JSON.stringify(this.data.cart);
      const encodedCartData = encodeURIComponent(cartData);
      console.log(this.data.totalPrice)
      wx.navigateTo({
        url: `/pages/indexs/pay/payment/payment?cartData=${encodedCartData}&productOrderNo=${productOrderNo}&totalPrice=${this.data.totalPrice}`,  // 添加 productOrderNo 到 URL 参数中
      });
    } else {
      wx.showToast({
        title: '购物车为空',
        icon: 'none',
      });
    }
  },

  //***************************优惠券************************** */
  getTotalAmount() {
    let totalPrice = 0;
    this.data.cart.forEach(item => {
      totalPrice += (item.price * item.quantity) / 100; // 计算总价
    });
    this.setData({
      totalAmount: totalPrice,
    }, () => {
      this.getAvailableCoupons(); // 获取可用优惠券
    });
    console.log('总价：' + this.data.totalAmount)
  },

  getAvailableCoupons() {
    wx.request({
      url: 'http://localhost:9020/couponIntegral-service/consumer/coupon/my', // 请求地址
      method: 'GET',
      data: {
        status: 1
      },
      success: res => {
        if (res.statusCode === 200) {
          this.setData({
            availableCoupons: res.data // 将可用优惠券列表数据保存到data中
          });
        } else {
          wx.showToast({
            title: '加载优惠券失败，请重试',
            icon: 'none'
          });
        }
      },
      fail: () => {
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
      }
    });
  },

  showCouponPopup() {
    this.setData({
      isCouponPopupVisible: true,
      couponHint: '请选择' // 点击时重置提示文本
    });
  },

  closeCouponPopup() {
    this.setData({
      isCouponPopupVisible: false,
      selectedCoupon: null, // 重置选中的优惠券
      couponHint: '请选择' // 恢复默认提示文本
    }, () => {
      // 关闭弹窗后重新计算总价（不带优惠券）
      this.calculateTotalPriceWithCoupon();
    });
  },

  selectCoupon(e) {
    const coupon = e.currentTarget.dataset.coupon;

    // 检查是否满足优惠券的使用条件 
    console.log(this.data.totalAmount)
    console.log(coupon.amountCondition)
    if (this.data.totalAmount >= (coupon.amountCondition)) {
      this.setData({
        selectedCoupon: coupon,
        isCouponPopupVisible: false,
        couponHint: coupon.name || '已选优惠券' // 设置为选中的优惠券名称或默认文本
      });
      // 如果需要重新计算总价，则在这里调用相关方法
      this.calculateTotalPriceWithCoupon();
    } else {
      wx.showToast({
        title: `当前订单金额未达到${coupon.amountCondition}元，无法使用该优惠券`,
        icon: 'none'
      });
    }
  },

  calculateTotalPriceWithCoupon() {
    let totalPrice = this.data.totalAmount;
    const selectedCoupon = this.data.selectedCoupon;
    let originalPrice = totalPrice; // 记录原始总价

    if (selectedCoupon) {
      switch (selectedCoupon.type) {
        case 1: // 满减优惠券
          if (totalPrice >= selectedCoupon.amountCondition) {
            totalPrice -= selectedCoupon.discountAmount; // 减去满减金额
            this.setData({
            couponHint: `${selectedCoupon.discountAmount}元` // 设置为节省的金额，保留两位小数
            });
          }
          break;
        case 2: // 折扣优惠券
        if (totalPrice >= selectedCoupon.amountCondition) {
          let savedAmount = totalPrice; // 计算节省的金额
          totalPrice *= (selectedCoupon.discountRate / 10); // 应用折扣率
          let a=savedAmount-totalPrice;
          this.setData({
            couponHint: `${a.toFixed(2)}元` // 设置为节省的金额，保留两位小数
          });
        } else {
          wx.showToast({
            title: `当前订单金额未达到${selectedCoupon.amountCondition}元，无法使用该优惠券`,
            icon: 'none'
          });
        }
          break;
        default:
          console.warn('未知的优惠券类型');
      }
    }

    // 确保总价不会变成负数
    totalPrice = Math.max(totalPrice, 0);

    this.setData({
      totalPrice: totalPrice.toFixed(2)
    });
  }

});
